#include "input_func.h"
#include "device_resource.h"
#include "print_rtt.h"
void LightningStrikeFeedbackSignalHardInit(void)
{
  GPIO_InitTypeDef gpio;
  /* 1. 开 GPIOD 时钟 */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  /* 2. 配置 PD7 为数字输入 */
  gpio.GPIO_Pin = GPIO_Pin_7;
  gpio.GPIO_Mode = GPIO_Mode_IN; /* 输入模式 */
  gpio.GPIO_PuPd = GPIO_PuPd_UP; /* 上拉（可改为 NOPULL/DOWN） */
  GPIO_Init(GPIOD, &gpio);
}
uint8_t GetLightningStrikeFeedbackSignal(void)
{
  return GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_7);
}
void ManualControlSignalHardInit(void)
{
  // 定义GPIO初始化结构体
  GPIO_InitTypeDef GPIO_InitStructure;

  // 1. 使能GPIOB和GPIOF的时钟（AHB1总线）
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF, ENABLE);

  // 2. 配置PB1为输入模式
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;        // 选择PB1引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;     // 输入模式
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 浮空输入（可根据需求改为上拉/下拉）
  // 输入模式下，速度配置不影响，此处仅为示例
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure); // 应用配置到GPIOB

  // 3. 配置PF11为输入模式
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; // 选择PF11引脚
  // 模式、上下拉、速度参数与PB1一致，无需重复设置
  GPIO_Init(GPIOF, &GPIO_InitStructure); // 应用配置到GPIOF
}

uint8_t GetManualControlSignal(void)
{
  uint8_t manual_control_signal = 0;
  manual_control_signal = (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) | (GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_11) << 1));
  return manual_control_signal;
}
int input_value_change_set_func(uint8_t *be_set_value, uint8_t current_value, uint8_t *change_status)
{
  if (*be_set_value != current_value)
  {

    switch (*change_status)
    {
    case 0:
      /* code */
      *change_status = 1;
      return -1;
    case 1:
      *be_set_value = current_value;
      *change_status = 0;
      return 0;

    default:
      *change_status = 0;
      return -1;
    }
  }
  return -1;
}
void input_status_check_cycle(void)
{
  uint8_t tmp_lightning_strike_signle = 0;
  static uint8_t tmp_lightning_strike_signle_status;
  uint8_t tmp_manual_control_signal = 0;
  static uint8_t tmp_manual_control_signal_status = 0;
  tmp_lightning_strike_signle = GetLightningStrikeFeedbackSignal();
  tmp_manual_control_signal = GetManualControlSignal();
  if (input_value_change_set_func(&lightning_strike_feedback_signal, tmp_lightning_strike_signle, &tmp_lightning_strike_signle_status) == 0)
  {
    LOG_INFO("lightning_strike_feedback_signal:%d\n", lightning_strike_feedback_signal);
  }
  if (input_value_change_set_func(&enableManualControl, tmp_manual_control_signal, &tmp_manual_control_signal_status) == 0)
  {
    LOG_INFO("enableManualControl:%d\n", enableManualControl);
  }
}
